<?php   
class Intranet_ResultadoController extends AcessoRestritoController
{
    	private $countHeader = 0;
	private	$countTotalizador = 0;
	private $countRegistros = 0;
	private $nomeArquivo = "";
	private $erroProcessamento = "Arquivo Inválido";
	private $registros;
        
        private $idRotina;

    public function indexAction()
    {
        
    }


    private function processarLinha($linha){
    	switch ($linha[0]) {
    		case '0':
    			if ($this->countHeader >= 1){
    				$this->erroProcessamento = "Mais de um registro de cabecalho";
    			}
    			else {
    				if ($this->processarHeader($linha)){
    					$this->countHeader++;
    					return true;
    				}
    			}
    			break;
    		case '1':
    			if ($this->processarRegistro($linha)){
    				$this->countRegistros++;
    				return true;
    			}
    			break;
    		case '9':
    			if ($this->countTotalizador>=1){
					$this->erroProcessamento = "Mais de um registro de Totalizador";
    			}
    			else{
    				if($this->processarTotalizador($linha)){
    					$this->countTotalizador++;
    					return true;
    				}
    			}
				break;
    		default:
    			$this->erroProcessamento = "Tipo registro inválido";
    			break;
    	}
    	return false;
    }

    private function validarHeader($codigoCliente, $numeroArquivo){
		$nameResult = sprintf("RR%02d%04d.DAT", $codigoCliente, $numeroArquivo);
		if (strcmp($this->nomeArquivo, $nameResult) != 0){
			$this->erroProcessamento = "Cabeçalho não confere com o nome do arquivo.";
			return false;
		}
		return true;
    }

    private function processarHeader($linha){
    	$codigoCliente = substr($linha, 1, 2);
    	$numeroArquivo = substr($linha, 3, 4);
    	$dataGravacao = substr($linha, 7, 8);
    	$horaGravacao = substr($linha, 15, 4);
    	return $this->validarHeader($codigoCliente, $numeroArquivo);
    }

    private function processarRegistro($linha){
    	$this->registros[] = array("codigoCliente" => substr($linha, 1, 2),
    	                           "numeroAmosta" => substr($linha,1, 10),
  			           "numeroAmostaCliente" => substr($linha,1, 10),
    				   "inicialNome" => substr($linha, 27, 6),
    				   "identificadorAmostra" => substr($linha, 33, 1),
    				   "identicacaoExame" => substr($linha, 34, 8),
    				   "tipoConteudo" => substr($linha, 42, 2),
    				   "valorTipoConteudo" => substr($linha, 44, 40));
    	return true;
    }

    private function processarTotalizador($linha){
		$totalRegistros = (int) substr($linha, 1, 4);
		if ($totalRegistros != $this->countRegistros+2){
			$this->erroProcessamento = "Total de registros não confere o número de  registros do arquivos";
		}
		return true;
    }

    private function salvarRegistros($idRotina)
    {
        $dao = new Resultado();
        $daoRotina = new RotinaAmostra();
        
        $resposta="";
        $valor1="";    
        $valor2="";
                
    	for ($i=0; $i < count($this->registros); $i++){
            $this->erroProcessamento = $this->registros;
                $dataResultado="";
                $idAmostra=trim($this->registros[$i]['numeroAmosta']);
                $idExame= trim($this->registros[$i]['identicacaoExame']);
                
                $qtde = $daoRotina->existeAmostraRotina($idRotina, $idAmostra, $idExame);
                
                if($qtde > 0)
                {
                
                    $KitSorologia = $daoRotina->getKitSoroUtilizado($idRotina,$idAmostra, $idExame);
                    $Metodologia = $daoRotina->getMetodologiaUtilizado($idRotina,$idAmostra,$idExame);

                
                 
                    if($this->registros[$i]["tipoConteudo"]=="DT")
                        $dataResultado = $this->registros[$i]["valorTipoConteudo"];
                    if($this->registros[$i]["tipoConteudo"]=="RE")
                        $resposta = $this->registros[$i]["valorTipoConteudo"];
                    if($this->registros[$i]["tipoConteudo"]=="DO")
                        $valor1 = $this->registros[$i]["valorTipoConteudo"];
                    if($this->registros[$i]["tipoConteudo"]=="CO")
                        $valor2 = $this->registros[$i]["valorTipoConteudo"];
                    if($this->registros[$i]["tipoConteudo"]=="TI")
                        $valor1 = $this->registros[$i]["valorTipoConteudo"];
                    if($this->registros[$i]["tipoConteudo"]=="BA")
                        $valor1 = $this->registros[$i]["valorTipoConteudo"];

                        if($resposta!="")
                         {
                            $dados = array('idResultado'=>null,	   
                                           'idRotina'=>$idRotina,
                                           'idAmostra'=>$idAmostra,
                                           'idExame'=>$idExame,
                                           'resposta'=>$resposta,
                                           'valor1'=>$valor1,
                                           'valor2' =>$valor2,
                                           'idMetodologia'=>$Metodologia,
                                           'idKitSorologia'=>$KitSorologia
                                );

                                $remove =  $dao->delResultadoAmostra($idRotina, $idAmostra, $idExame); 
                                $resultado = $dao->salvarregistro($dados); 
                                $resposta="";
                                $valor1="";    
                                $valor2="";

                        }
                }
  
        }
        	
    	
    	return true;
    }

     public function importarAction()
    {
         $idRotina = $this->_request->getParam('idRotina');
         $this->view->action = '/intranet/resultado/importar/idRotina/'.$idRotina;
          if (strtolower($_SERVER['REQUEST_METHOD']) == 'post'){
            $idRotina = $this->_request->getParam('idRotina');
            $arquivotmp = $_FILES['arquivo']['tmp_name'];
 		    if ($arquivotmp != ""){
 		    	$this->nomeArquivo = $_FILES['arquivo']['name'];
 				$handle = fopen($arquivotmp, "r");
 				$linhas = file($arquivotmp);
                                fclose($handle);
				$this->countHeader=0;
				$this->countTotalizador=0;
				$this->countRegistros=0;
 				for($i=0; $i < count($linhas); $i++){
 					if (!$this->processarLinha($linhas[$i])){
 						$this->view->mensagem = sprintf(" Erro Linha %d , %s", $i+1, $this->erroProcessamento);
 						break;
 					}
 				}
 				if (($this->countHeader == 1) && ($this->countTotalizador==1)){
                                      
 					if ($this->salvarRegistros($idRotina)){
 						$this->view->mensagem = "registros importados com sucesso!";
 					}
 				}
			}else{
  				$this->view->mensagem =  "Arquivo Inválido!";
			}
        	$this->render();
        }     
       
    }
    
    public function listaAction()
    {
        $this->_helper->viewRenderer->setNoRender();
        $rotina = new Rotina();
	$dados = $rotina->getRotina($this->_getAllParams());//*** retorna todos os parametros 
	$this->_response->setBody(Zend_Json::encode($dados));//* echo json_enconde()
    }
    
    public function visualizarAction()
    {
        $idRotina = $this->_request->getParam('idRotina');
        $this->view->assign("idRotina",$idRotina);
    }
    
    public function alterarAction()
    {
        $idRotina = $this->_request->getParam('idRotina');
        $this->view->assign("idRotina",$idRotina);
    }
    
    public function gridAction()//alterar e visualizar
    {
        $this->_helper->viewRenderer->setNoRender();
        $resultado = new Resultado();
        $resultado->setIdRotina($this->_request->getParam('id'));
	$dados = $resultado->grid($this->_getAllParams());
	$this->_response->setBody(Zend_Json::encode($dados));
    }
    
    public function subgridAction()//alterar e visualizar
    {
        $this->_helper->viewRenderer->setNoRender();
        $resultado = new Resultado();
        $resultado->setIdExame($this->_request->getParam('row_id'));
        $resultado->setIdRotina($this->_request->getParam('idRotina'));
        $dados = $resultado->subgrid($this->_getAllParams()); 
	$this->_response->setBody(Zend_Json::encode($dados));
    }
        
    public function editarAction()//edição dos campos da subgrid
    {
        $this->_helper->viewRenderer->setNoRender();
        $resultado = new Resultado();
        $usuario = $this->getIdLogin();
        $resultado->setIdResultado($this->_request->getParam('idResultado'));
        $dados = $resultado->subGridEdit($this->_getAllParams(), $usuario);
        $this->_response->setBody($dados);
    }
    
    public function deletarAction()
    {
        $this->_helper->viewRenderer->setNoRender();
        $resultado = new Resultado();
        $resultado->setIdRotina($this->_request->getParam('idRotina'));
        $usuario = $this->getIdLogin();
        $dados = $resultado->del($usuario);
        $this->_response->setBody(Zend_Json::encode($dados));
    }
    
    public function verificaAction()
    {
        $this->_helper->viewRenderer->setNoRender();
        $idRotina = $this->_request->getParam('idRotina');
        $resultado = new Resultado();
        $dados = $resultado->vrfcResultado($idRotina);
        $this->_response->setBody(Zend_Json::encode($dados));
    }
    
    public function manualAction()
    {
        $idRotina = $this->_request->getParam('idRotina');
        $resultado = new Resultado();
        $usuario = $this->getIdLogin();
        $dados = $resultado->manual($idRotina, $usuario);
        if($dados){
            $this->view->assign("idRotina",$idRotina);
        }
    }
    
    public function vrfcamostraAction()
    {
        $this->_helper->viewRenderer->setNoRender();
        $idResultado = $this->_request->getParam('idResultado');
        $resultado = new Resultado();
        $dados = $resultado->vrfcAmostra($idResultado);
        $this->_response->setBody(Zend_Json::encode($dados));
    }
    
    
}
?>